<?php

/**
 * pasajero actions.
 *
 * @package    KrazyTaxi
 * @subpackage pasajero
 * @author     Your name here
 */
class pasajeroActions extends sfActions {

    public function executeIndex(sfWebRequest $request) {//bienvenido
        // Initialize the google map
        $this->gMap = new GMap();
        $this->gMap->setCenter(-33.46, -70.644);
        $this->gMap->setZoom(12);

        // Add some markers on the map
//    $this->gMap->addMarker(
//      new GMapMarker(51.245475,6.821373)
//    );
//    $this->gMap->addMarker(
//      new GMapMarker(46.262248,6.115969)
//    );
//    $this->gMap->addMarker(
//      new GMapMarker(48.848959,2.341577)
//    );
//    $this->gMap->addMarker(
//      new GMapMarker(48.718952,2.219180)
//    );
//    $this->gMap->addMarker(
//      new GMapMarker(47.376420,8.547995)
//    );
        $this->signin = new sfGuardFormSignin();
        $this->peticion = new PetForm();
        
        if ($request->isMethod('post')) {
            $this->peticion->bind($request->getParameter('peticion'));
            if ($this->peticion->isValid()) {
                
                $ubicacion = new Ubicacion();
                //Traemos los datos del form
                $peticion = $request->getParameter('peticion');
                //Obtenemos vector con calle,numero
                $direccionOrigen = explode(',', $peticion['origen']);
                $direccionDestino = explode(',', $peticion['destino']);
                //Vemos si esta en la BD
                $criteria = new Criteria();
                $criteria->add(CallePeer::CALLE, $direccionOrigen[0], Criteria::EQUAL);
                $callesOrigen = CallePeer::doSelect($criteria);
                $criteria = new Criteria();
                $criteria->add(CallePeer::CALLE, $direccionDestino[0], Criteria::EQUAL);
                $callesDestino = CallePeer::doSelect($criteria);

                $calle = new Calle();



                if ($callesOrigen == null) {
                    //Guardamos la calle y numero
                    $calle->setCalle($direccionOrigen[0]);
                    $ubicacion->setNumerodireccion($direccionOrigen[1]);
                    $calle->addUbicacion($ubicacion);
                    
                } else {
                    $calle = $callesOrigen[0];
                    $ubicacion->setNumerodireccion($direccionOrigen[1]);
                    $calle->addUbicacion($ubicacion);
                }                
                //obtenimos la direccion guardada para el geocod
                $address = $ubicacion->getNumerodireccion() . " " . $ubicacion->getCalle()->getCalle() . ",santiago,chile";
                // Create geocoded address
                $geocoded_address = new GMapGeocodedAddress($address);
                $geocoded_address->geocode($this->gMap->getGMapClient());

                $ubicacion->setX($geocoded_address->getLng());
                $ubicacion->setY($geocoded_address->getLat());
                //guardamos en la BD
                $calle->save();

                //guardamos la peticion en BD
                $ubicacion->GuardarPeticion();

                // Center the map on geocoded address
                $this->gMap->setCenter($geocoded_address->getLat(), $geocoded_address->getLng());

                // Add marker on geocoded address
                $this->gMap->addMarker(
                        new GMapMarker($geocoded_address->getLat(), $geocoded_address->getLng())
                );
                $this->gMap->setZoom(16);


                $mapEvt = new GMapEvent('click','function(event){click_coord(event);}',false);
                $this->gMap->addEvent($mapEvt);


//            $this->gMap->addMarker(
//                    new GMapMarker(-33.46, -70.644)
//            );
            }
        }
    }

//    public function $ubi(Ubicacion $ubicacion){
//        $peticion = new Peticion();
//        $peticion->setFechahoraruta('now');
//        $detalle = new Detalle();
//        $detalle->setLineadetalle(1);
//        $ubicacion->addDetalle($detalle);
//        $peticion->addDetalle($detalle);
//        $ubicacion->save();
//        $peticion->save();
//    }
//  public function executeIndex(sfWebRequest $request)
//  {
//    $this->Usuarios = UsuarioPeer::doSelect(new Criteria());
//  }

    public function executeShow(sfWebRequest $request) {
//        $this->Usuario = UsuarioPeer::retrieveByPk($request->getParameter('idusuario'));
//        $this->forward404Unless($this->Usuario);

        $this->form = new RegisterForm();
    }

    public function executeNew(sfWebRequest $request) {
        $this->form = new RegisterForm();
    }

    public function executeCreate(sfWebRequest $request) {
        $this->forward404Unless($request->isMethod(sfRequest::POST));

        $this->form = new RegisterForm();

        $this->processForm($request, $this->form);

        $this->setTemplate('new');
    }

    public function executeEdit(sfWebRequest $request) {
        $this->forward404Unless($Usuario = UsuarioPeer::retrieveByPk($request->getParameter('idusuario')), sprintf('Object Usuario does not exist (%s).', $request->getParameter('idusuario')));
        $this->form = new UsuarioForm($Usuario);
    }

    public function executeUpdate(sfWebRequest $request) {
        $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
        $this->forward404Unless($Usuario = UsuarioPeer::retrieveByPk($request->getParameter('idusuario')), sprintf('Object Usuario does not exist (%s).', $request->getParameter('idusuario')));
        $this->form = new UsuarioForm($Usuario);

        $this->processForm($request, $this->form);

        $this->setTemplate('edit');
    }

    public function executeDelete(sfWebRequest $request) {
        $request->checkCSRFProtection();

        $this->forward404Unless($Usuario = UsuarioPeer::retrieveByPk($request->getParameter('idusuario')), sprintf('Object Usuario does not exist (%s).', $request->getParameter('idusuario')));
        $Usuario->delete();

        $this->redirect('pasajero/index');
    }

    protected function processForm(sfWebRequest $request, sfForm $form) {
//        $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
        $form->bind($request->getParameter('sf_guard_user'));
        if ($form->isValid()) {
//            $Usuario = $form->save();
             $form->save();

            $this->redirect('pasajero');
        }
    }

}
